package br.com.vagacerta.controller;

import java.sql.SQLException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;


import org.springframework.web.bind.annotation.ResponseBody;

import br.com.vagacerta.dao.CupomDAO;
import br.com.vagacerta.dao.PagamentoDAO;
import br.com.vagacerta.modelo.Cupom;
import br.com.vagacerta.modelo.CupomAvulso;
import br.com.vagacerta.modelo.CupomMensalista;
import br.com.vagacerta.modelo.TipoCupom;

@Controller
public class PagamentoController {

	private final CupomDAO cupomDAO;
	private final PagamentoDAO pagamentoDAO;
	
	
	@Autowired
 	public PagamentoController(CupomDAO cupomDAO, PagamentoDAO pagamentoDAO) {
		this.cupomDAO = cupomDAO;
		this.pagamentoDAO = pagamentoDAO;
	}
	
	
	
	@RequestMapping("consultaCupomParaPagamento")
	public String pesquisaCupomPorNomeParaPagamento(String nomeCupom, Model model) {

		Cupom cupom = null;
		TipoCupom tipoCupom = new TipoCupom();
		boolean existePagamento = false;
		Double valorASerPago = null;
		
		if(cupomDAO.existeCupomEmitidoPeloNome(Long.parseLong(nomeCupom))) {
			
			tipoCupom = cupomDAO.retornaTipoCupomPorNomeCupom(Long.parseLong(nomeCupom));
			
			if(tipoCupom.getTipoCupom().equals("MENSALISTA")) {
				
				cupom = new CupomMensalista();		
				
				cupom = cupomDAO.retornaCupomMensalistaPeloNomeCupom(Long.parseLong(nomeCupom));
				
				existePagamento = pagamentoDAO.existePagamentoPorCodigoCupom(cupom.getCodigoCupom());
				
				if(!existePagamento){
					
					valorASerPago = cupom.getTipoServico().getValorServico();
				}
				
			} else if (tipoCupom.getTipoCupom().equals("AVULSO")) {
				
				cupom = new CupomAvulso();
				
				cupom = cupomDAO.retornaCupomAvulsoPeloNomeCupom(Long.parseLong(nomeCupom));
				
				existePagamento = pagamentoDAO.existePagamentoPorCodigoCupom(cupom.getCodigoCupom());
				
				if(!existePagamento){
						valorASerPago = ((CupomAvulso) cupom).calculaValorASerPagoCupomAvulso(cupom);
				}
				
			}
		}
		
		
		model.addAttribute("cupom", cupom);
		model.addAttribute("pagamento", existePagamento);
		model.addAttribute("valorASerPago", valorASerPago);
		
		return "pagamento/TabelaPagamentoCupom";
		

	}
	
	@RequestMapping("efetuaPagamentoCupom")
	public @ResponseBody int efetuaPagamentoCupom(String nomeCupom, String valorPagamento) {

		Cupom cupom = null;
		TipoCupom tipoCupom = new TipoCupom();
		boolean existePagamento = false;
		int retorno = 0;
		
		tipoCupom = cupomDAO.retornaTipoCupomPorNomeCupom(Long.parseLong(nomeCupom));
		try {
			

		if(tipoCupom.getTipoCupom().equals("MENSALISTA")) {
		
			cupom = new CupomMensalista();		
			
			cupom = cupomDAO.retornaCupomMensalistaPeloNomeCupom(Long.parseLong(nomeCupom));
			
			existePagamento = pagamentoDAO.existePagamentoAtivoPorCodigoCupom(cupom.getCodigoCupom());
			
			if(!existePagamento){
				
				pagamentoDAO.efetuaPagamentoPeloNomeCupom(cupom.getCodigoCupom());
				cupomDAO.insereDadosPagamentoCupomMensalista((CupomMensalista) cupom);
			}


			
		} else if (tipoCupom.getTipoCupom().equals("AVULSO")) {
			
			cupom = new CupomAvulso();
			
			cupom = cupomDAO.retornaCupomAvulsoPeloNomeCupom(Long.parseLong(nomeCupom));
			
			existePagamento = pagamentoDAO.existePagamentoPorCodigoCupom(cupom.getCodigoCupom());
			
			if(!existePagamento){
				
				valorPagamento = valorPagamento.trim().substring(2).replace(",", ".");
				pagamentoDAO.efetuaPagamentoPeloNomeCupom(cupom.getCodigoCupom());
				cupomDAO.insereDadosPagamentoCupomAvulso(cupom.getCodigoCupom(), Double.parseDouble(valorPagamento));
			}

		}
		
		retorno = 1;
		
		}catch(SQLException e){
			
			retorno = 0;
		}
			
		
		return retorno;
	}
	
	
}
